package com.cskaoyan.javase.basic._2variable._3notice;

/**
 * Java基本数据类型的数据类型转换
 * java变量的数据类型一旦确定,轻易不会发生改变,但也不是绝对不可变
 *
 * 以基本数据类型的变量为例子,它们可以发生两种数据类型转换:
 * 前提: 数值类型之间可以发生类型转换
 *      所以boolean类型不参与类型转换,其他7种都可以参与类型转换
 *      1.自动类型转换
 *          编译器自动完成类型转换,称之为自动类型转换,不需要程序员写额外代码完成转换
 *          条件:
 *              我们把数值类型理解成容器,取值范围越大的数据类型容量越大
 *              当你把小取值范围的数据类型转换成大取值范围的数据类型时
 *              这时数据一般情况下是安全的,不会发生装不下数据溢出的情况
 *              取值范围
 *                  小 ---> 大
 *              是自动类型转换
 *
 *              思考:
 *                  自动类型转换是绝对安全的吗?是一定不会出现数据失真吗?
 *                  不是,因为存在浮点数,浮点数有有效位数的限制
 *
 *      2.强制类型转换
 *          由程序员手动写代码,强制完成类型转换
 *          条件:
 *              取值范围
 *                  大 ---> 小
 *          强制类型转换是大到小,相当于把长江的水,倒进杯子里
 *          是非常不安全的,极易出现数据失真的情况
 *          所以编译器不会自动完成这类类型转换,需要特殊语法完成
 *          语法:
 *          强转后的数据类型 变量名 = (强转后的数据类型)被强转的变量名;
 *          注意,强制类型转换极易出现数据失真,做强转之前要慎重
 *
 * 除开基本数据类型,引用数据类型也是可以做类型转换的,后面会学习.
 *
 * @since 15:56
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        int num = 2147483647;
        float num2 = num;
        System.out.println(num2);
        double num3 = num;
        System.out.println(num3);

        // double ---> int
        double a = 12.34;
        // 强转的语法,可以用快捷键 alt + 回车自动完成
        // .cast
        int b = ((int) a);
        System.out.println(b);
    }
}
